#include <iostream>
#include <string>

int main() {
    std::string s1 = "Hello, COW!";
    std::string s2 = s1;  // C++11 之后：实际拷贝数据，而非共享

    // 地址验证（不同实现可能不同，但 s1 和 s2 的地址通常独立）
    std::cout << "Before" << std::endl;
    std::cout << "s1 data address: " << (void*)s1.data() << std::endl;
    std::cout << "s2 data address: " << (void*)s2.data() << std::endl;
    std::cout << std::endl;

    // 修改 s2，观察 s1 是否受影响
    s2[0] = 'X';

	// 输出 "Hello, COW!"（s1 未被修改）
    std::cout << "s1: " << s1 << std::endl;
    // 输出 "Xello, COW!"
    std::cout << "s2: " << s2 << std::endl;

    // 地址验证（s1 和 s2 仍然是原有地址）
    std::cout << "After" << std::endl;
    std::cout << "s1 data address: " << (void*)s1.data() << std::endl;
    std::cout << "s2 data address: " << (void*)s2.data() << std::endl;
}
